<template>
  <div ref="main" class="main" />
</template>

<script>
import * as echarts from 'echarts'
// 更新的思路：watch监听一下数据的变化 -> chart.setOption()
export default {
  // 图表类需求的通用demo写法
  // 1. 正确安装
  // 2. 在组件中准备一个有效的有宽高的dom元素节点
  // 3. methods单独去写一个初始化的方法[dom的获取 参数的准备]
  // 4. 选择mounted钩子函数中做图标的初始化调用

  // 按需：如果性能要求 按需导入
  // 为什么图表的参数不放在data里面：data中只要你放进去数据不管对象嵌套层次多深都会进行响应式的初始化
  // 又因为图表类的参数一般都比较庞大 非常影响组件初始化的性能 所以不建议把参数放到data
  props: {
    indicator: {
      type: Array,
      default: () => []
    }
  },
  watch: {
    indicator() {
      // 在这里调用chart.setOption
      // 如何获取图表实例？ 把图表实例挂载到this 共享
      // 使用新的参数替换老的参数
      this.myChart.setOption({
        ...this.option,
        radar: {
          indicator: this.indicator
        }
      })
    }
  },
  mounted() {
    this.initChart()
  },
  methods: {
    // 初始化方法
    initChart() {
      // 获取一个渲染图表的dom节点 -> vue如何获取dom元素？  ref + this.$refs.echart
      // 把echart渲染到准备好的dom节点中  -> vue中如何保证一个dom已经可以使用？ 钩子函数？ mounted

      // 让组件可以进行参数定制化？ 父传子传递参数 达到一个复用的目的 很多地方都有可能用到雷达图
      // 设计为props 在实际开发的过程中 有很多很多的业务参数都有可能会被定制 只要是需要被定制的都可以进行props抽离
      this.myChart = echarts.init(this.$refs.main)
      this.option = {
        radar: {
          // shape: 'circle',
          indicator: this.indicator
        },
        series: [
          {
            name: 'Budget vs spending',
            type: 'radar',
            data: [
              {
                value: [4200, 3000, 20000, 35000, 50000, 18000],
                name: 'Allocated Budget'
              },
              {
                value: [5000, 14000, 28000, 26000, 42000, 21000],
                name: 'Actual Spending'
              }
            ]
          }
        ]
      }

      this.option && this.myChart.setOption(this.option)
    }
  }
}
</script>

<style lang="scss" scoped>
.main{
  width: 500px;
  height: 220px;
}
</style>
